Multipathing (MP) drivers are commonly used in host computing systems (“hosts”) to read data from and write data to storage arrays via multiple paths. In a typical arrangement, a host runs an application program on behalf of a user. The host is connected to a storage array, either directly, via a computer network, and/or via a storage area network (SAN). In typical operation, the application program issues IO requests. The IO requests designate data to be written to or read from the array; they may also designate activities to be performed on the array (e.g., control IOs). Within the host, each IO request is passed to an MP driver, which selects a path for transmitting the IO request to the array. In general, many such paths are provided, and it is a role of the MP driver to select a path for each IO request. Multiple paths are provided between the host and the array to provide redundancy, allow load sharing, and enable failover. A popular example of an MP driver is the PowerPath® driver from EMC Corporation of Hopkinton, Mass.
IO requests sometimes fail to complete. For example, a loose or disconnected cable can interrupt a selected path, preventing an IO request from reaching the array. Other errors can also cause IO requests to fail, such as faulty hardware. In response to an IO request failure, the MP driver typically retries the IO request down a different path.
Some IO requests fail even in the absence of any problem with the selected path. These IO requests, sometimes referred to as “bogus IOs,” fail no matter which path is selected. Examples of bogus IOs include requests to write to write-protected media, requests to read or write media that are not ready to respond to read or write requests, and IO requests directed to damaged media. Bogus IOs fail even when the paths between the host and the array are working perfectly.